The size of large databases and other software applications may be a limiting factor in the usefulness of such applications, particularly when queries and other manipulations of the applications/data are themselves long and complex. For example, a user may wish to issue a complex query to obtain results from a relational database having many thousands or millions of records, in which case a response time to provide corresponding query results may be unacceptably long. Moreover, such scenarios may lend themselves to inefficient use of available computational resources, e.g., by allowing over-consumption of resources by one user with respect to other current users.
Availability of multi-core (e.g., multi-CPU) computing systems have facilitated the development of parallel query execution as a way to mitigate such concerns. For example, by using two available cores, multiple queries (and/or multiple portions thereof) may be computed in parallel with one another. Consequently, for example, two equivalent queries may be executed in less than double the time it would take to execute one of the queries.
Implementation of such parallel queries, however, is difficult to accomplish in an efficient or optimal manner. For example, there may be costs associated with splitting/assigning multiple queries to the multiple cores, as well as costs associated with re-joining or merging the results of the queries. Depending, e.g., on the nature of the queries in question and the extent of the parallelization, such costs may limit, and may ultimately dominate or overwhelm, the benefits of the parallelization.
Moreover, complexity and unpredictability of a runtime environment of one or more running queries may exacerbate the difficulties of multi-core parallel query processing. For example, even if an acceptable plan for query parallelization is formulated prior to runtime of a query (or queries) in question, it may occur that runtime events may occur which reduce the efficacy or desirability of the planned query schedule (for example, when processing cores have substantially greater or lesser runtime availability than anticipated).
Thus, effective scheduling of multi-core processing of parallel queries (or portions thereof) is a difficult and non-trivial challenge. Failure in this regard may substantially limit an efficacy of available computing resources and a productivity of available human resources.